\chapter{Apéndice}

\section{Unified Modeling Language (UML)}

		Los Diagramas de Estructura Estática de UML se utilizan para representar tanto Modelos Conceptuales como Diagramas de Clases de Diseño, convirtiéndola en una herramienta útil a la hora de diseñar el sistema en cualquiera de sus niveles. Este lenguaje gráfico provee notación estándar para la documentación de elementos tales como: bases de datos, clases, conexiones, etc y pudiendo especificar métodos, funciones e interacciones entre estos \cite{JaGor05}.
		UML provee una extensa cantidad de elementos para desarrollo en la ingeniería del software, pero solo describiremos los utilizados en este trabajo. Para más información visitar \url{http://www.clikear.com/manuales/uml/diagramasestructuraestatica.aspx}.
		
\subsection{Notas}

		Una nota sirve para añadir cualquier tipo de comentario a un diagrama o a un elemento de un diagrama. Es un modo de indicar información en un formato libre, cuando la notación del diagrama en cuestión no nos permite expresar dicha información de manera adecuada. Una nota se representa como un rectángulo con una esquina doblada con texto en su interior. Puede aparecer en un diagrama tanto sola como unida a un elemento por medio de una línea discontinua. Puede contener restricciones, comentarios, el cuerpo de un procedimiento, etc. 

\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/d5.jpeg}	  	
\caption{Ejemplo de notas.} 
\end{figure} 

\subsection{Dependencias}

		La relación de dependencia entre dos elementos de un diagrama significa que un cambio en el elemento destino puede implicar un cambio en el elemento origen (por tanto, si cambia el elemento destino habría que revisar el elemento origen). Una dependencia se representa por medio de una línea de trazo discontinuo entre los dos elementos con una flecha en su extremo. El elemento dependiente es el origen de la flecha y el elemento del que depende es el destino (junto a él está la flecha). 
	
\begin{figure}[ht]
\centering
\includegraphics[scale=0.8]{pictures/5_depend_uml.jpg}
\caption{Ejemplo de dependencias.} 
\end{figure} 	

\subsection{Clases, atributos y métodos}

		Una clase se representa mediante una caja subdividida en tres partes: En la superior se muestra el nombre de la clase, en la media los atributos y en la inferior los métodos. Una clase puede representarse de forma esquemática, con los atributos y operaciones suprimidos, siendo entonces tan solo un rectángulo con el nombre de la clase. En la Fig. 4.8 se ve cómo una misma clase puede representarse a distinto nivel de detalle según interese, y según la fase en la que se esté.
		 
\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/5_clases_uml.jpeg}
\caption{Ejemplo de clases.} 
\end{figure} 
		
\subsection{Relaciones entre clases}

\subsubsection{Asociaciones}
	Las asociaciones entre dos clases se representan mediante una línea que las une. La línea puede tener una serie de elementos gráficos que expresan características particulares de la asociación. A continuación se verán los más importantes. 

\paragraph{Nombre de la asociación y dirección}
	El nombre de la asociación es opcional y se muestra como un texto que está próximo a la línea. Se puede añadir un pequeño triángulo negro sólido que indique la dirección en la cual leer el nombre de la asociación. En el ejemplo de la Fig 4.9 se puede leer la asociación como “Director manda sobre Empleado”.
	
\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/5_nom_a_uml.jpg}
\caption{Ejemplo de la asociación y dirección.} 
\end{figure} 

	Los nombres de las asociaciones normalmente se incluyen en los modelos para aumentar la legibilidad. Sin embargo, en ocasiones pueden hacer demasiado abundante la información que se presenta, con el consiguiente riesgo de saturación. En ese caso se puede suprimir el nombre de las asociaciones consideradas como suficientemente conocidas. En las asociaciones de tipo agregación y de herencia no se suele poner el nombre. 

\paragraph{Multiplicidad}

\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/d3.jpeg}
\caption{Ejemplo de Multiplicidad.} 
\end{figure} 
	
	La multiplicidad es una restricción que se pone a una asociación, que limita el número de instancias de una clase que pueden tener esa asociación con una instancia de la otra clase. Puede expresarse de las siguientes formas:
	
\begin{itemize}
	\item Con un número fijo: 1.
	\item Con un intervalo de valores: 2..5.
	\item Con un rango en el cual uno de los extremos es un asterisco. Significa que es un intervalo abierto. Por ejemplo, 2..* significa 2 o más.
	\item Con una combinación de elementos como los anteriores separados por comas: 1, 3..5, 7, 15..*.
	\item Con un asterisco: * . En este caso indica que puede tomar cualquier valor (cero o más).
\end{itemize} 
		
\paragraph{Roles}
	Para indicar el papel que juega una clase en una asociación se puede especificar un nombre de rol. 
	
\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/d6.jpeg}
\caption{Ejemplo Roles.} 
\end{figure} 		
	
	Se representa en el extremo de la asociación junto a la clase que desempeña dicho rol. 

\paragraph{Agregación}
	El símbolo de agregación es un diamante colocado en el extremo en el que está la clase que representa el “todo”.
	 
\begin{figure}[ht]
\centering
\includegraphics[scale=0.6]{pictures/d1.jpeg}
\caption{Ejemplo Agregación.} 
\end{figure}
	
\subsection{Herencia y polimorfismo}
	La relación de herencia se representa mediante un triángulo en el extremo de la relación que corresponde a la clase base o clase más general.
	
\begin{figure}[ht]
\centering
\includegraphics[scale=0.7]{pictures/d2.jpeg}
\caption{Ejemplo Herencia.} 
\end{figure}

  	Si se tiene una relación de herencia con varias clases derivadas, pero en un diagrama concreto no se quieren poner todas, esto se representa mediante puntos suspensivos. En el ejemplo de la Fig. 4.13, sólo aparecen en el diagrama 3 tipos de departamentos, pero con los puntos suspensivos se indica que en el modelo completo (el formado por todos los diagramas) la clase “Departamento” tiene subclases adicionales, como podrían ser “Recursos Humanos” y “Producción”. 


\section{Código Genético}
Tabla del código genético.

	\begin{figure}[ht]
	\centering
	\includegraphics[scale=1]{pictures/gencode.png}
	\caption{Código genético.} 
	\end{figure} 	

	
\section{Formato FASTA}
Es un formato de texto estándar utilizado en la bioinformática y que representa secuencias de aminoácidos con su identificación de una única letra. Ademas se puede colocar una cabecera con información adicional o colocar varias secuencias en un mismo archivo. Mas información sobre este formato en \url{http://www.ncbi.nlm.nih.gov/blast/fasta.shtml}.

\section{Pseudo Código}
A lo largo del trabajo se definieron algoritmos utilizando un pseudo código similar a C. Este no pertenece a ningún estándar pero nos pareció conveniente utilizarlo.

\subsection{Gramática}
Utilizamos notación formal para denotar la gramática.

\begin{lstlisting}[basicstyle=\tt, tabsize=2, fontadjust=true]
<sentence> :: = <sentence>..<sentence>
			| while <sentence> do { <sentence> }			
			| for all <element> in <set of elements> do { <sentence> }
			| if <sentence> { <sentence> } else { <sentence> }
			| <type> <element>
			| <element> = <element>
			| type <namefunction>(<element>,..,<element>) {<sentence>}
			| return <element>
			| case (<element>) {<element>: <sentence>...<element>: <sentence>}
			
<type> :: = C++ types

<element> :: = C++ instance

\end{lstlisting}
Es decir este pseudo código trata de imitar al de C++ eliminando algunos elementos que no son necesarios para el caso, como iteradores, estructuras, clases, puntos y coma, entre otras cosas.

\section{Métricas obtenidas}
A modo de resumen enumeramos muchas de las métricas obtenidas producto de este trabajo:

\subsection{Código}
Métricas relacionadas con el código: estas fueron obtenidas a partir de las siguientes herramientas:

\begin{enumerate}
\item Gcov: herramienta para calcular el cubrimiento de código. \url{http://gcc.gnu.org/onlinedocs/gcc/Gcov.html}
\item LCov: herramienta complementaria a Gcov que elabora un archivo $html$ más legible. \url{http://linux.die.net/man/1/lcov}
\item CCCC: software para calcular la cantidad de lineas de código y otras métricas. \url{http://cccc.sourceforge.net/}
\item Doxygen: herramienta de documentación automática de código. \url{http://www.stack.nl/~dimitri/doxygen/}
\item Astyle: pequeña herramienta que permite definir el estilo del código de forma automática.
\end{enumerate}

Las métricas obtenidas:

\begin{itemize}
\item Líneas de Código (LOC): 2800 (aprox)
\item Líneas de Comentario (COM): 1500 (aprox)
\item Proporción (LOM/COM): 2
\item Complejidad ciclomática: 19 (Moderate Risk)
\item Cobertura de Código por líneas: $91.9\%$
\item Cobertura de Código por funciones: $81.1\%$
\end{itemize}
Es importante notar que el diseño ha resultado efectivo ya que el problema, que a pesar de ser complejo, pudo ser resuelto en escasas lineas de código.

\subsection{Otras Métricas}
Algunos números interesantes:

\begin{itemize}
\item Cantidad de textos leídos: 30 aproximadamente.
\item Cantidad de horas de trabajo: 660 hs aproximadamente (durante 10 meses).
\item Cantidad de mails enviados y recibidos: 500 aproximadamente.
\item Cantidad de años figurativos: 10 años mas viejos.
\end{itemize}

\section{Otros Documentos}
Incluimos a este trabajo los documentos de Especificación de Requerimientos y el Documento de Diseño.
 